{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Link to Jupyter notebook: [2.feature-selection.ipynb](./2.feature-selection.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction to feature selection\n",
    "\n",
    "In machine learning, feature selection is need for several reasons:\n",
    "\n",
    "* (Interpretation) We want to know which features are most relevant.\n",
    "* (Computation) With fewer features, computation is more efficient in terms of time and memory.\n",
    "* (Performance) After filtering irrelevant features, the model is less prone to overfitting.\n",
    "\n",
    "In general, feature selection methods fall into three categories:\n",
    "\n",
    "**Filter methods**\n",
    "\n",
    "Feature selection is performed independently of the predictor. Usually filter methods are\n",
    "the fastest and simplest way do feature selection. Every feature or a group of features is\n",
    "evaluated in each step, and features that pass a given criteron are kept.\n",
    "\n",
    "**Wrapper methods**\n",
    "\n",
    "Different from filter methods in that a complex predictor is used to rank the features, \n",
    "which combines all features to make a prediction. Ideally, all subsets can be evaluated to get\n",
    "the best subset. However, greedy algorithms (e.g. sequential feature selection)\n",
    "and stochastic algorihtms are often used instead\n",
    "of best subset selection because the number of subsets increase exponentially with the number\n",
    "of features. Wrapper methods may be stuck in local minima if they cannot explore the whole feature\n",
    "subset space. Wrapper methods often require large computation resources especially the computational complexity\n",
    "of the predictor is high.\n",
    "\n",
    "**Embedded methods**\n",
    "\n",
    "Feature selection is embedded into a prediction algorithm, which is typically implemented by\n",
    "adding a regularization term, either explicitly or implicitly. Feature interdependence is considered by\n",
    "embedded methods. Compared to wrapper methods, the computational complexity embedded methods is lower."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import required Python packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Populating the interactive namespace from numpy and matplotlib\n"
     ]
    }
   ],
   "source": [
    "%pylab inline\n",
    "import pandas as pd\n",
    "# For machine learning\n",
    "from sklearn.datasets import make_classification, make_regression\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.cluster import KMeans\n",
    "from sklearn.svm import SVC, LinearSVC\n",
    "from sklearn.gaussian_process import GaussianProcessClassifier\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.model_selection import KFold, train_test_split, GridSearchCV, cross_val_score\n",
    "from sklearn.metrics import accuracy_score, roc_auc_score, f1_score, recall_score, precision_score, \\\n",
    "    roc_curve, precision_recall_curve, average_precision_score, matthews_corrcoef, confusion_matrix\n",
    "# For plotting\n",
    "import seaborn as sns\n",
    "sns.set()\n",
    "sns.set_style('whitegrid')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Seed the random number generator\n",
    "\n",
    "To make the randomly generated dataset reproducible, we fixed seed of the\n",
    "[numpy pseudo-random number generator](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.RandomState.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "random_state = np.random.RandomState(654321)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Generate dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_samples = 1000\n",
    "n_features = 50\n",
    "\n",
    "X, y = make_classification(n_samples=n_samples, n_classes=2, n_features=n_features,\n",
    "                           n_informative=3, n_redundant=2, n_clusters_per_class=2,\n",
    "                           class_sep=0.8, random_state=random_state)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Univariate feature selection\n",
    "\n",
    "Univariate feature selection removes features by calculating a statistical score for individual features\n",
    "only select features with high-ranking scores. Scores for each feature is calculated independently,\n",
    "make this method very efficient and can be performed in parallel.\n",
    "Univariate feature selection is useful when the number of features is very large, compared to the number samples.\n",
    "\n",
    "In univariate feature selection, scores are typically evaluated between input features and class labels/target variables. For classification problems, continous features can be scored using various statistical test, \n",
    "including [Mann-Whitney U tests](https://en.wikipedia.org/wiki/Mann–Whitney_U_test),\n",
    "[t-tests](https://en.wikipedia.org/wiki/Student%27s_t-test),\n",
    "[ANOVA models](https://en.wikipedia.org/wiki/Analysis_of_variance),\n",
    "area under the ROC curve (AUROC). \n",
    "ANOVA models can accomodate multi-class labels.\n",
    "For discrete features, chi-square test, mutual information or gini index are useful criteria.\n",
    "\n",
    "For regression problems, correlation coefficient or F-tests can be used for feature selection.\n",
    "\n",
    "Unsupervised filters do not use information about target variables, but can greatly reduce the number of features\n",
    "and is less prone to overfitting. Commonly used filters include non-zero fraction and variance.\n",
    "Sparse datasets contain large numbers of missing/zero values and features with too many missing values can be removed.\n",
    "Features with larger variance are probably more informative about target values.\n",
    "\n",
    "After calculating scores for each feature, we can simply select features according to k highest scores\n",
    "or a fixed threshold. If p-values of a statistical test are available, we can select p-values according to\n",
    "a given false positive rate (FPR), false discovery rate (FDR) or Family-wise error rate (FWE).\n",
    "\n",
    "Features according to [false positive rate (FPR)](https://en.wikipedia.org/wiki/False_positive_rate) are selected as:\n",
    "$$ p(x_k) \\le \\alpha $$\n",
    "\n",
    "Features according to [family-wise error rate (FWER)](https://en.wikipedia.org/wiki/Family-wise_error_rate)\n",
    "(also called [Bonferroni correction](https://en.wikipedia.org/wiki/Bonferroni_correction))\n",
    "are selected as:\n",
    "$$ p(x_k) \\le \\frac{1}{M} \\alpha $$\n",
    "\n",
    "Features according to false discovery rate (FDR) are selected by first sorting pvalues in accending order\n",
    "and then select significant features according the following criterion \n",
    "([Benjamini-hochberg procedure](https://en.wikipedia.org/wiki/False_discovery_rate)):\n",
    "$$ p(x_k) \\le \\frac{k}{M} \\alpha $$\n",
    "\n",
    "Because univariate feature selection considers each feature independently, redundant features may be selected."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ANOVA F-test (classification)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GenericUnivariateSelect(mode='k_best', param=10,\n",
       "            score_func=<function f_classif at 0x7efce2631b70>)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.feature_selection import GenericUnivariateSelect, f_classif\n",
    "\n",
    "selector = GenericUnivariateSelect(f_classif, mode='k_best', param=10)\n",
    "selector.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAy8AAAGyCAYAAADtSvuEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X283VV9L/hPyMOJShWGKfiAiuXqal8TQY1VtJUraL1eNESgRU1GlAHBsUJwuCJBqhVfGMy91AaGq7SoA9UMRYukCjg+4EUFZTCoLdUu8KmSKYJAK0iI2Tk588c+wZMnsk+yf3uf3znv9+vFi+yntddZO7+c8znru9aaNTY2FgAAgKlur2F3AAAAoBfCCwAA0ArCCwAA0ArCCwAA0ArCCwAA0ArCCwAA0ArCCwAA0ArCCwAA0ArCCwAA0ArCCwAA0ArCCwAA0Apz+t3g2rVrR5L8fpK7k4z2u30AAKD1Zid5SpJbFy5c+OteX9T38JJucPl6A+0CAADTy8uSfKPXJzcRXu5Okuc85zmZN29eOptGM3fO7Abehsdy++23Z8GCBcPuxoxl/IfL+A+fz2C4jP/w+QyGy/gPVy/jv3Hjxtxxxx3JeHboVRPhZTRJ3nXh9XlwfSerVy5t4C3oxcjIyLC7MKMZ/+Ey/sPnMxgu4z98PoPhMv7DNYnxn9QyEwv2AQCAVmhi5iVJsmr54oyMjGRjZzTz5iobAwAA9kxj4WULwQUAgJmq0+lk3bp12bBhw7C7MjBz5szJD37wg0dvz58/PwceeGDmzp27523vcQsAAMAOrVu3Lr/1W7+Vgw46KLNmzRp2dwbi4YcfzhOe8IQkydjYWO6///6sW7cuz3rWs/a4bWteAACgIRs2bMh+++03Y4LLtmbNmpX99tuvbzNPjYaXjR1nVAIAMLPN1OCyRT+//sbCy7IVa6x3AQAA+kbZGAAATDFXX311Xve612XRokVZsmTJVgvgt/XiF7940u1/+MMfzp133tnTcx9++OEceeSRk36PJjQWXlYtX6xsDAAAJunuu+/OJz7xiVx55ZX53Oc+l3e961155zvf2df3uO222zI2NtbXNgeh0d3GlI0BAMDkrF+/Pp1OJ+vXr8/8+fPz/Oc/P+ecc05+9atf5T3veU/uuuuuPO5xj8t5552Xgw8++NHX3XPPPTn33HNz3333Zb/99ssHP/jB7L///vn0pz+dT3ziE5k1a1ZOPPHE7L333rn99ttz+umn56qrrsott9ySj3zkI9m0aVNe+cpX5vTTT8/69etz5plnZt26dVmwYMEQR2NrysYAAGAKOfjgg/P7v//7Ofzww/PmN785H//4x/OCF7wgl1xySV7zmtfk6quvzjnnnJP3ve99W73u/PPPz7Jly/LZz342r3/963PhhRfm5z//eS677LJcddVVueqqq7J69eocccQRWbBgQS666KJ0Op1cccUVufLKK3PNNdek1ppvfetb+eQnP5mDDjoon/vc5/KiF71oSCOxPee8AADAFPOBD3wgb3nLW/LVr341X/jCF/KZz3wm8+bNyze+8Y1ccsklSZJf/epXW73m1ltvzb/8y78kSTZv3pwnPvGJ+e53v5sXv/jF2XvvvZN019JM9L3vfS933nln/uRP/iRJ8sgjj+RHP/pR1q5dm7e97W1JkqOOOioXX3xxo19vr4QXAACYQm688caMjo7myCOPzMEHH5yTTjopxx13XH70ox/l+uuvz1Of+tQk3TKxicbGxnL11Vdn9uzZ6XQ6eeihh3Lbbbdt9Zy77rorBxxwwKO3N2/enCOOOCIrVqxIkvz7v/975s+fn6997WuPPmfWrFlTZrvnoZSNWcgPAAA7NjIykg9/+MO57777kiQPPPBAHn744Rx77LH59Kc/nSS54YYbtlvEf8ghh+Szn/1skuTKK6/MihUrsmDBgtx66615+OGHs379+px88sl55JFHMnv27IyOjua5z31ubr755tx3333pdDo59dRT853vfCcvfOELc9111yVJvvSlL02Zxf2NzbwsW7EmD67v7PCx1SuXNvW2AADQaocddlje8IY3ZOnSpZk9e3bmzZuX5cuX59BDD80555yTRYsWZWRkJBdccMFWr/uzP/uzvOc978nll1+effbZJxdeeGH233//vPWtb80b3vCGjI2N5U//9E/zpCc9KS996Utzxhln5PLLL8+ZZ56ZE088MZs2bcqrXvWqvOQlL8nzn//8vPvd785rX/vavOAFL8js2VNjIy5lYwAAMMUsXbo0S5du/wv/j3zkI9vdd8sttyRJnv70p+eKK67Y7vFjjz02xx577Fb3nXLKKTnllFOSJEcffXSOPvrorR6fP39+Vq1atdv9b0pj4WXV8sUZGRnZ4WMbO6O2UQYAACZlKGteBBcAAGCynPMCAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAAD0tRh7TPlEPjWnPOyeVMne82ZO+xuAADAbps3d3aWnPWpvrfb6yHw69aty6tf/eocfPDBW93/0Y9+NE95ylO2e/7FF1+cJDnttNP2vJN90Fh4uf3Ss5MND/WtvYVnXda3tgAAYKbaf//9s2bNmmF3Y7e0ZuYFAABoxh133JEPfOADWb9+fR544IGccsopeeMb3/jo451OJ+ecc07uvPPOJMmSJUty/PHH57777st73/ve/PznP8+sWbNy5pln5tBDD22sn42FlwWnXpCRkZG+tadsDAAA9ty9996bxYsXP3p70aJFueeee/L2t789L3nJS3LXXXfl6KOP3iq8fOc738kvf/nLXHPNNbnnnnty4YUX5vjjj8/555+f4447Lq94xSty7733ZsmSJVm9enWe8IQnNNL31sy8CC4AALDndlQ2Njo6mq9//eu59NJLc8cdd2T9+vVbPf7sZz87P/nJT3LSSSfl8MMPz1lnnZUkufnmm/PjH/84F110UZJk06ZNWbduXfbff/9G+t5oeNnYGc28ubObfAsAAGAPnXHGGXniE5+YI444IkcddVQ+//nPb/X4vvvum2uvvTY33XRTbrzxxhxzzDG59tprs3nz5lx++eXZZ599knRndebPn99YPxvbKnnZijWCCwAAtMBNN92U008/Pa985Svzta99LUl3NmaLr3zlK3nXu96Vl7/85Tn33HPz+Mc/PnfffXcOO+ywrF69Oknywx/+MIsWLcqGDRsa62drysYAAKDtNnZGe97WeLLt7snEwWmnnZYlS5ZkZGQkv/u7v5unPe1pWbdu3aOPH3744fniF7+Y17zmNRkZGcnRRx+dUkrOPffcvPe9782iRYuSJCtXrmxsvUvSYHhZtXyxsjEAAJigqZ+Ne233wAMPzA033LDd/SeeeGJOPPHE7e6feL7Lhz70oe0eP+CAA3LppZdudd/DDz/cU192R2NlY0lzHw4AADDzNBpeAAAA+kV4AQAAWkF4AQAAWqGx8NLZNLrrJwEAAPSosfAyd47F+gAAQP845wUAAAZk86ZO9pozdyjtvv/9789tt92WTqeTn/3sZzn44IOTJCeccEKOO+64vvepCY2Fl86m0YyMNNU6AAC0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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efcde2969b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_data = pd.DataFrame({\n",
    "    '-log10(p-value)': -np.log10(selector.pvalues_),\n",
    "    'Feature': np.arange(n_features),\n",
    "    'Selected': selector.get_support()\n",
    "})\n",
    "fig, ax = plt.subplots(figsize=(14, 7))\n",
    "sns.barplot(x='-log10(p-value)', y='Feature', hue='Selected', orient='h',\n",
    "            data=plot_data, ax=ax)\n",
    "ax.set_yticks([])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Linear regression F-test (regression)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAy8AAAGyCAYAAADtSvuEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X+cXWV9L/pPMjOZCIhwOIWqqCjVR08jqPEHeCpHEH8UDSi0iOGIckDotfLDa4mAiKf6wqCvQznApZiW6oVqLqJFogJeVCwqVC4GtaXaBxR/JLcIAqcVEsLs+XH/2DvcyQ9gSPaaycq8368XL7LWXvtZzzx7ZSafeb7PWnMmJiYCAACwrZs70x0AAACYCuEFAABoBeEFAABoBeEFAABoBeEFAABoBeEFAABoBeEFAABoBeEFAABoBeEFAABoBeEFAABoBeEFAABohcF+N7hy5crhJK9IcneSsX63DwAAtN5AkqcnuXXhwoWPTPVNfQ8v6QaX7zTQLgAAsH15TZLvTvXgJsLL3UnyvOftnR12eEoDzfNEbr/99ixYsGCmuzGr+QxmlvGfWcZ/Zhn/mWX8Z5bxn1lPZvxHRkZyxx13JL3sMFVNhJexJNlhh6dkeHi4geaZCmM/83wGM8v4zyzjP7OM/8wy/jPL+M+sLRj/J7XMxIJ9AACgFRoLL51Ra/UBAID+aaJsLEkyNDjQVNMAANAKnU4nq1evzrp162a6K40bHBzMT37yk032z58/P3vuuWeGhoa2/hxb3QIAALBZq1evzlOf+tTstddemTNnzkx3p1Fr1qzJjjvuuMG+iYmJ3H///Vm9enWe+9znbvU5rHkBAICGrFu3Lrvtttt2H1wey5w5c7Lbbrv1bebJmhcAAGjQbA0u6/Xz628svFjzAgAA9JOyMQAA2MZcddVVeetb35pFixZl8eLFm10Iv96rXvWqJ93++eefnzvvvHNKx65ZsyYHHXTQkz5HE5SNAQDANuTuu+/OZz7zmVxxxRX5yle+ktNOOy3vf//7+3qO2267LRMTE31tczq4VTIAAGxD1q5dm06nk7Vr12b+/Pl56UtfmjPPPDMPPfRQPvShD2XVqlV5ylOeko9+9KPZe++9H33fPffck7POOiv33Xdfdtttt3z84x/P7rvvni984Qv5zGc+kzlz5uTYY4/NTjvtlNtvvz0nn3xyrrzyytxyyy255JJLMjo6moMPPjgnn3xy1q5dmw984ANZvXp1FixYMIOjsSFlYwAAsA3Ze++984pXvCIHHHBA3vWud+XTn/50Xvayl+Xiiy/Om9/85lx11VU588wz85GPfGSD951zzjk55ZRT8qUvfSlvf/vbc9555+XXv/51Lr300lx55ZW58sors3z58hx44IFZsGBBLrzwwnQ6nVx++eW54oorcvXVV6fWmu9973v57Gc/m7322itf+cpX8spXvnKGRmJTnvMCAADbmI997GN597vfnW9961v52te+li9+8YuZN29evvvd7+biiy9Okjz00EMbvOfWW2/NL3/5yyTJ+Ph4dt555/zwhz/Mq171quy0005JumtpJvvRj36UO++8M3/8x3+cJHn44Yfzs5/9LCtXrsyf/MmfJEkOOeSQXHTRRY1+vVMlvAAAwDbkxhtvzNjYWA466KDsvffeOe6443LEEUfkZz/7Wa677ro84xnPSNItE5tsYmIiV111VQYGBtLpdPLggw/mtttu2+CYVatWZY899nh0e3x8PAceeGCWLl2aJPm3f/u3zJ8/P9/+9rcfPWbOnDnbzO2elY0BAMA2ZHh4OOeff37uu+++JMkDDzyQNWvW5PDDD88XvvCFJMkNN9ywySL+ffbZJ1/60peSJFdccUWWLl2aBQsW5NZbb82aNWuydu3aHH/88Xn44YczMDCQsbGxvPjFL87NN9+c++67L51OJyeeeGJ+8IMf5OUvf3muvfbaJMnXv/71bWZxv5kXAADYhuy333456qijcvTRR2dgYCDz5s3LGWeckX333TdnnnlmFi1alOHh4Zx77rkbvO/DH/5wPvShD+Wyyy7LLrvskvPOOy+777573vOe9+Soo47KxMRE/vRP/zRPe9rT8upXvzqnnnpqLrvssnzgAx/Isccem9HR0bzhDW/I/vvvn5e+9KX54Ac/mLe85S152cteloGBbeNmXMILAABsY44++ugcffTRm+y/5JJLNtl3yy23JEme9axn5fLLL9/k9cMPPzyHH374BvtOOOGEnHDCCUmSQw89NIceeugGr8+fPz8XXHDBFve/KdNSNjY+2pmO0wAAANuxxmZebl92erLuwSTJwiWXNnUaAABglrBgHwAAaIXGZl4WnHhuhoeHk3TLxuYODjV1KgAAYBaYlpkXwQUAANhaysYAAIBWEF4AAGCajHTGWtXutsZzXrZDCxcunOkuzHo+g5ll/GeW8Z9ZWzr+1qfC9Jg3NJDFSz7X93aXf3LTZ8JszurVq/OmN70pe++99wb7P/WpT+XpT3/6JsdfdNFFSZKTTjpp6zvZB9Nyq2QAYNvmsQYwe+y+++5ZsWLFTHdji5h5AQCAWe6OO+7Ixz72saxduzYPPPBATjjhhLzjHe949PVOp5Mzzzwzd955Z5Jk8eLFOfLII3Pffffl7LPPzq9//etMTEzktNNOy6tf/erG+jktt0oGALZtysZg9rj33ntz2GGHPbq9aNGi3HPPPXnve9+b/fffP6tWrcqhhx66QXj5wQ9+kH//93/P1VdfnXvuuSfnnXdejjzyyJxzzjk54ogj8rrXvS6/+MUvcvzxx+fqq6/OTjvt1Ejfzbxsh1auXKnmfIb5DGaW8Z9Zxn9mben4Cy4we2yubGxsbCzf+c53smzZstxxxx1Zu3btBq8///nPz89//vMcd9xxOeCAA7JkyZIkyc0335y77rorF154YcbHxzM6OppVq1blRS96USN9F14AAGCWO/XUU7PzzjvnwAMPzCGHHJKvfvWrG7y+66675pprrslNN92UG2+8MW9729tyzTXXZHx8PJdddll22WWXrFmzJmvWrMluu+3WWD/dKhkAAGa5m266KSeffHIOPvjgfPvb307SnY1Z75vf/GZOO+20vPa1r81ZZ52VHXbYIXfffXf222+/LF++PEly1113ZdGiRXn44Ycb66eZFwAAmCYjnbEp39b4ybY7b2hgi99/0kknZfHixRkeHs4LX/jCPPOZz8zq1asfff2AAw7I9ddfnze/+c0ZHh7OoYcemlJKzjrrrJx99tlZtGhRxsfH88lPfrKx9S6J8AIAANNmawJGP9rdc889c8MNN2yy/9hjj82xxx67yf7Jz3f5xCc+scnre+yxR5YtW5YkWbNmTXbcccepdnmLKBsDAABaQXgBAABaQXgBAABaQXgBAABaobHw0hkde+KDAAAApqix8DI02MydFAAAgNnJrZIBAGCajI92MndwaEba/fM///Pcdttt6XQ6+dWvfpW99947SXLMMcfkiCOO6HufmtBYeOmMjmV4uKnWAQCgfeYODmXlJ4/ve7sLl1z6hMd85CMfSZKsXr06xxxzTFasWNH3fjRN2RgAAMxiF110UY477rgccsghWb58ed75znfmlltuSdINOgcddFCS5L777st73/veHH744TniiCNy8803T3tflY0BAMAsNzIykmuvvTZJct111232mHPOOSdHHHFEXve61+Xee+/N4sWLc/XVV2ennXaatn4KLwAAMMvts88+T3jMzTffnLvuuisXXnhhkmR0dDSrVq3Ki170oqa79yhrXgAAYJabP3/+BtsTExNJugFlvfHx8Vx22WXZZZddkiT33ntvdtttt+nrZKx5AQAAJtl1113z05/+NEnyjW9849H9++23X5YvX54k+elPf5pFixbl4Ycfnta+NRZeAACA9jn++OOzfPnyvO1tb8u6dese3X/WWWflRz/6URYtWpT3v//9+eQnPzmt610SZWMAADBtxkc7U7qt8Za0O9Xnx+y555654YYbHt0+6aSTNnh9n332eXTxfpK8733vS5LsscceWbZsWR96u+WUjQEAwDRp4gGVTba7rVE2BgAAtILwAgAAtILwAgAADVp/2+HZqp9fv/ACAAANmT9/fu6///5ZG2AmJiZy//33b/IcmS3V2N3GAABgtttzzz2zevXq/OY3v5nprjRuZGQk8+bN22T//Pnzs+eee/blHMILAAA0ZGhoKM997nNnuhvTYuXKldl3330bPYeyMQAAoBWEFwAAoBWEFwAAoBWEFwAAoBUaCy+d0bGmmgYAAGahxsLL0OBAU00DAACzkLIxAACgFZSNAQAAraBsDAAAaAVlYwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCtMW3gZH+1M16kAAIDt0GBTDd++7PRk3YOPbi9ccmlTpwIAAGYBZWMAAEArNDbzsuDEczM8PPzo9vhoJ3MHh5o6HQAAsJ1rbOalMzq24YkEFwAAYCs0Fl6GBgeaahoAAJiFrHkBAABaYdrKxgAAALaGsjEAAKAVlI0BAACtILwAAACtILwAAACtILwAAACtILwAAACtILwAAACtILwAAACtILwAAACtILwAAACtILwAAACtILwAAACtILwAAACtILwAAACtILwAAACtMK3hZXy0M52nAwAAtiODTTV8+7LTk3UPbrBv4ZJLmzodAACwnVM2BgAAtEJjMy8LTjw3w8PDG+wbH+1k7uBQU6cEAAC2Y43NvHRGxzY9meACAABsocbCy9DgQFNNAwAAs5A1LwAAQCtMa9kYAADAllI2BgAAtIKyMQAAoBWEFwAAoBWEFwAAoBUs2AcAAFrBgn0AAKAVlI0BAACtoGwMAABoBWVjAABAKygbAwAAWkF4AQAAWkF4AQAAWkF4AQAAWkF4AQAAWmHawsv4aGe6TgUAAGyHBptq+PZlpyfrHnx0e+GSS5s6FQAAMAsoGwMAAFqhsZmXBSeem+Hh4Ue3x0c7mTs41NTpAACA7dy0zbwILgAAwNZoPLyMdMaaPgUAADALNBZeTlm6IouXfC7zhgaaOgUAADCLWLAPAAC0QmML9i8447AMDw9npDNm9gUAANhqjc+8CC4AAEA/KBsDAABaQXgBAABaQXgBAABaobHw0hn1fBcAAKB/GgsvQ4MW6gMAAP2jbAwAAGgFZWMAAEArKBsDAABaQdkYAADQCsILAADQCsILAADQCsILAADQCsILAADQCsLLFhof7cx0FwAAYFYZbKrh25ednqx7sKnmZ9zCJZfOdBcAAGBWMfMCAAC0QmMzLwtOPDfDw8NNNT/jxkc7mTs4NNPdAACAWcPMyxYSXAAAYHo1Gl5GOmNNNg8AAMwijYWXU5auyLyhgaaaBwAAZhllYwAAQCs0Fl4uOOMwZWMAAEDfNDrzomwMAADoF2VjAABAKwgvAABAKzQWXjqj1rsAAAD901h4GRq03gUAAOgfZWMAAEArKBsDAABaQdkYAADQCsrGAACAVhBeAACAVhBeAACAVmg0vIx0LNoHAAD6o7HwcsrSFZk3ZNE+AADQH8rGAACAVmgsvFxwxmHKxgAAgL4ZnMpBpZTfTfI3SZ6f5DVJLk/y7lrr3Y/3PmVjAABAv0x15uUvk1yd5OEkDyT5YZJLm+oUAADAxqYaXvaqtf51kvFaa6fW+sEkz26wXwAAABuYangZL6U8emwp5alP4r0AAABbbaoB5Kokn0vytFLKiUluSHJlY70CAADYyJTCS63140muTXJrktcn+askH22wXwAAABuY6t3GLq+1HpPkbxvuDwAAwGZNtWzsJaWUOY32BAAA4HFMaeYlyb8m+edSyveSPLR+Z6315EZ6BQAAsJGphpd/6P0HAAAwI6YUXmqtf950RwAAAB7PVBfs/1OSiY3311r3eaz3dEbHMjy8FT0DAACYZKplY++b9Od5SY5KctfjvWFocGBL+wQAALCJqZaN3Th5u5TyjSQ3JzmniU4BAABsbKq3St7Ybkme8XgHdEbHtrBpAACATW3Jmpc5SZ6d5K8e7z3KxgAAgH7akjUvE0l+U2v9SQP9AQAA2Kyphpdjaq3HTd5RSvlirfWPGugTAADAJh43vJRSLknyzCSvKaX8zqSXhpI8r8mOAQAATPZEMy9/k2RBkn2T/N2k/aNJvtdUpwAAADb2uOGl1vr9JN8vpXyj1rp6mvoEAACwiamueXlWKeXiJDule7exgSTPrbU+u7GeAQAATDLV57xcmu5DKXdO8rkkv82GZWQAAACNmmp4mai1fiLJ3yf5lyRHJnlDU50CAADY2FTDy4O9//8syYJa68NJxprpEgAAwKamuublllLK55N8OMk1pZQXpHvHMQAAgGkx1ZmX9yc5v9Z6R5JTe+97x1TeONIxQQMAAGy9KYWXWutEkvFSyolJvp7kylprfbz3nLJ0RRYv+VzmDQ30oZsAAMBsN6XwUko5NslnkixJskuSFaWU9zTZMQAAgMmmuublpCT7J7mx1npvKWVhkq8l+evHesMFZxyW4eHhjHTGzL4AAABbbaprXsZqrb9dv1FrXZUpLtgXXAAAgH6Yanh5oJTykiQTSVJKOTrJA431CgAAYCNTLRs7JckXk+xdSrk7ycNJDmusVwAAABuZUniptf5LKWXfJC9IMtDdVTuN9gwAAGCSxw0vpZS/qrWe0Nvctdb6k2noEwAAwCaeaM3Lyyf9+fomOwIAAPB4nii8zHmMPwMAAEyrqd5tLOndaQwAAGAmPNGC/bmllF3TnXUZmPTnJEmt1e2SAQCAafFE4eXFSe7L/x9Y7p/02kS6dx4DAABo3OOGl1rrkykrAwAAaIxwAgAAtEKj4WWkM9Zk8wAAwCzSWHg5ZemKzBuyJAYAAOgPZWMAAEArNBZeLjjjMGVjAABA3zQ686JsDAAA6BdlYwAAQCsILwAAQCsILwAAQCsILwAAQCsILwAAQCvMSHgZH+3MxGkBAIAWG2yq4duXnZ6se3Czry1ccmlTpwUAALZTysYAAIBWaGzmZcGJ52Z4eHizr42PdjJ3cKipUwMAANuhGZl5EVwAAIAnS9kYAADQCsILAADQCsILAADQCnMmJib62uDKlSv3SvLzBQsWPOaCfQAAYPpMxw2zVq5cmYULF07p2EceeSS33357kjx34cKFv5jqOWbkOS8AAMD02V6es6hsDAAAaIUZec4LAAAwfbaX5yw2PvMy0hlr+hRsZOXKlTPdhVnPZzCzjP/MMv4zy/jPLOM/s4z/Y9segkvSYHg5ZemKLF7yucwbGmjqFAAAwCxizQsAANAKwgsAANAKjS3Yv+CMwzI8PJyRzpjSMQAAYKs1PvMiuAAAAP2gbAwAAGgF4QUAAGgF4QUAAGgF4QUAAGgF4QUAAGiFaQkv46Od6TgNAACwHWvsOS+3Lzs9WfdgkmThkkubOg0AADBLKBsDAABaobGZlwUnnpvh4eEk3bKxuYNDTZ0KAACYBaZl5kVwAQAAtlZj4aUzOtZU0wAAwCzUWHgZGhxoqmkAAGAWsmAfAABoBWVjAABAKygbAwAAWkHZGAAA0ArCCwAA0ArWvAAAAK1gzQsAANAKysYAAIBWUDYGAAC0grIxAACgFZSNAQAArSC8AAAArSC8AAAArdBoeBnpWLQPAAD0R2Ph5ZSlKzJvyKJ9AACgP5SNAQAArdBYeLngjMOUjQEAAH3T6MyLsjEAAKBflI0BAACtILwAAACtILwAAACt0Fh46YxarA8AAPRPY+FlaNBifQAAoH+UjQEAAK2gbAwAAGgFZWMAAEArKBsDAABaQXgBAABaQXgBAABaQXgBAABaQXgBAABaQXgBAABaQXgBAABaQXgBAABaQXgBAABaQXgBAABaodHwMtIZa7J5AABgFmksvJyydEXmDQ001TwAADDLKBsDAABaobHwcsEZhykbAwAA+qbRmRdlYwAAQL8oGwMAAFpBeAEAAFpBeAEAAFpBeAEAAFpBeAEAAFph2sLL+Ghnuk4FAABshwabavj2Zacn6x58dHvhkkubOhUAADALKBsDAABaobGZlwUnnpvh4eFHt8dHO5k7ONTU6QAAgO3ctM28CC4AAMDWUDYGAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0QmPhpTM61lTTAADALNRYeBkaHGiqaQAAYBZSNgYAALSCsjEAAKAVlI0BAACtoGwMAABoBeEFAABoBeEFAABohcbDy0jHwn0AAGDrNRZeTlm6IouXfC7zhizcBwAAtp6yMQAAoBUGm2r4gjMOy/DwcEY6Y2ZfAACArdb4zIvgAgAA9IOyMQAAoBWEFwAAoBUaCy+dUbdIBgAA+qex8DI0aK0LAADQP8rGAACAVlA2BgAAtIKyMQAAoBWUjQEAAK0gvAAAAK0gvAAAAK3QeHgZ6Vi4DwAAbL3GwsspS1dk8ZLPZd6QhfsAAMDWUzYGAAC0wmBTDV9wxmEZHh7OSGfM7AsAALDVGp95EVwAAIB+UDYGAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0gvACAAC0QmPhpTM61lTTAADALNRYeBkaHGiqaQAAYBZSNgYAALSCsjEAAKAVlI0BAACtoGwMAABoBeEFAABoBeEFAABoBQv2AQCAVrBgHwAAaAVlYwAAQCsoGwMAAFpB2RgAANAKysYAAIBWEF4AAIBWaDS8jHSsewEAAPqjsfByytIVmTdk3QsAANAfysYAAIBWaCy8XHDGYcrGAACAvml05kXZGAAA0C/KxgAAgFYYbKDNgSQZGRlpoGmm6pFHHpnpLsx6PoOZZfxnlvGfWcZ/Zhn/mWX8Z9ZUx39SVnhSpVpzJiYmnmSXHt/KlSv/IMl3+tooAACwPXrNwoULvzvVg5uYebk1yWuS3J3Ein0AAGBjA0menm52mLK+z7wAAAA0wYJ9AACgFYQXAACgFYQXAACgFYQXAACgFYQXAACgFYQXAACgFYQXAACgFfr+kMpSyuIkZyUZSvI/a60X9/scbKiU8pEkR/Y2r6m1LimlHJzkL5I8Jcnna61nzVgHZ4lSyv9I8h9rre8upbwkyaVJdk7y7SR/UmsdndEObqdKKYuSfCTJjkmur7We4vqfPqWU/5rkjN7mdbXWP3P9N6+UsnOSm5O8pdb6i8e65n0WzdjM+J+Q5OQkE0m+n+TEWuuI8W/GxuM/af/7kvxRrfW1ve1nJ/lskt2T1CRH11ofmvYOb2c2c/3vn+T8JE9N8o9J3tXk9d/XmZdSyjOTnJPkD5K8JMkJpZT/1M9zsKHeD6w3JHlpumO+sJTyjiSfTnJYkhcleUUp5Q9nrpfbv1LK65K8a9KuzyZ5X631BUnmJHnPjHRsO1dKeV6STyV5a5J9krysd627/qdBKWWHJBcm+S9J9k3ymt73JNd/g0opr0ry3SQv6G0/JY99zfss+mwz4/+CJKcleXW634fmJvnT3uHGv882Hv9J+/9TktM3Ovwvk/xlrfWF6YbKD09LJ7djm7n+d05yVZITaq2/3zvsuN7/G7n++102dnCSG2qtD9Ra1yT5YpI/6vM52NDdST5Qax2ptXaS/CTdC+rOWuvPewn3s0n+eCY7uT0rpfyHdEP7x3vbz0nylFrr93qH/J8x/k15W7q/ZV7du/7fnmRtXP/TZSDdnyM7pjvbPpSkE9d/096T7j+O/7W3/cps5pr3vagxG4//I0neW2v9ba11Isk/JXm28W/MxuOfUspwkmVJzp60byjJAen+WzQx/v2y8fi/Psk/1Fr/sbd9UpIvNXn997ts7Bnp/mN6vbvT/aZKQ2qt/7z+z6WU56dbPnZRNv0c9pzmrs0my5J8KMmzetub+3tg/Jvxe0lGSilfTvLsJF9N8s8x/tOi1vpgKeXDSf4l3dB4Y5KRGP9G1VqPT5JSyvpdj/U9x/eiBmw8/rXWXyb5ZW/f7yR5X5J3x/g3YjPXf5IsTXf28eeT9v3HJL+dVKZk/PtgM+P/e0keKqVckeSFSW5K8oF0K4Iauf77PfMyN916z/XmJBnv8znYjFLK7yf5erpT13fF5zAtSinHJ1lVa/3mpN3+HkyfwXRnfI9Lsn+SVyV5Xoz/tCil7JPkvyV5Trr/UBtLt4zV+E+vx/qe43vRNOqVzn8zyd/UWv8+xn9alFJen+TZtdbPbPTSxuOfGP8mDCZ5Y7prHxemOxN/ehq8/vsdXlYnefqk7d/NpGk9mlFK+c/pfsM8vdZ6WXwO0+ntSd5QSvlhko8mOTTJ8TH+0+XXSb5Ra/1NrfXhJF9KN8wY/+nxxiTfrLXeW2t9JN2ygNfG+E+3x/qe72fBNCmlvDDdBcyX1Vo/1ttt/KfHO5L8fu/n8KVJXl5K+XySe5M8rZQy0Dvu6TH+Tfh1ku/1ylbHklyZbtVVY9d/v8PLN5K8rpTyO72FnEck+Vqfz8EkpZRnJbk6yeJa6xW93bd0Xyq/1/tLuzjJdTPVx+1ZrfX1tdYFtdaXpFtr++Va67FJ1vVCZZK8M8a/KV9N8sZSyi69a/0P061vdv1Pjx8lObiUsmMpZU6SRemWjrn+p9dmv+f3ypl8Fg0rpTw1yfVJzqq1nrd+v/GfHrXW/1ZrfVHv5/DxSb5fa317bx3kd9L9JWOSHBPj34Tr071Z1PrS+bckWdnk9d/X8FJr/X/Trf3/VpIfJllea/1/+nkONvFnSeYn+YtSyg97v3l4d++/v0vy43Tr0b/4WA3QiKOTnF9K+ZckO6V7Ryb6rNZ6S5JPpnvnkx+nW3d+SVz/06LWen2S/yvJynRvjzmU5Ny4/qdVrXVdHvua91k07/gkeyT5wPqfw6WUj/ZeM/4z673p3vn2x0lek+6jPOijWuuqJCcm+UrvOv8P6a5BShq6/udMTGxcDggAALDt6XfZGAAAQCOEFwAAoBWEFwAAoBUeppACAAAEo0lEQVSEFwAAoBWEFwAAoBUGZ7oDAPRfKeW1Sf6PWuuCrWxnON3n6SyrtX6xt2+HdB8G99J0fwn2wVrr1ZPe878lGau1/tXWnHsKfftFkj+qtX5/C99/apIHaq2X97NfADTHzAsAm1VK2T/JPyT5zxu99N+TPFRrfVGS1ye5uJSyZ+89z0n3mSN/PX093WIXJTm1lPK7M90RAKbGzAvAdq6U8rQkFyd5SZKJdJ9yfGatdbSUckiSTyQZS/fhwgcn+YNa6y+SnJzk9CRnbtTk29J9intqrb8qpXw9yZFJ/iLJGUn+ttY6UUrZK8mNSb6W5FVJ5iR5X631Oxv1byDJL5K8tda6srfv80n+PslVSZal+xDA3033QaRH1lrvnfT+12bSLNNmtj+U5Ih0f2H3iyTvrbX+a611rJRyZZIPJnn/kxtVAGaCmReA7d+FSe5P8uIkL0+yb5I/K6XsluRvk/zXWutLknwryTPXv6nW+o5a6/Wbae9ZSVZN2l6dZM9Sypx0Q8JXJ7327CQ39to/PcnnSylDkxurtY4l+XSSY5OklLJruiFqeZKjkvxDrXX/JM9LsjbJO6f6hZdSjul93a/s9eHadEve1rs+yeFTbQ+AmSW8AGz//jDdmYiJWusjST7V23dAkh/XWn+UJLXWy5L8dgrtzU13Bme9OenO3OyWZJferM16/6vWurzX/nW94/bZTJufTnJkKWVeknck+XKt9d9rrRckubmU8r8n+cskC5LsNLUvO0nyliT7Jfl+KeWHSU5KUia9/vMkzy6lzH8SbQIwQ5SNAWwnSikfTXJob3NyCNk4bMxNMpRkNN3gMdn4FE71qyTPSHJPb/sZ6ZacTSSZU0qZW2td387oRu+dm2SslHJt731Jcnat9cullNvSDRvHJjm19zV9Iskr0w033+r1e+M+T2y0b96kPw8k+USt9ZJee8NJdp30+kjv/VP5ugGYYWZeALYTtdaza60v6ZVHnT3ppf87yftKKXN6/3g/IcnXk9yU5AWllH2SpJRyRJJdsmHQ2ZwVvTbSW6j/piRfrbXen+R/JXnOpGN/p5Typt6xi5J0kvxTrfWQ9X2ttX65d+xfp7v+ZMda6029fW9M8j9rrX+b5N50bxAwsFF/fpPu7MnuvdK1ozb62o8vpezc2/5ouqVy6z0vyc9rrSNP8DUDsA0QXgC2fycn2T3JP/X+q0nOqbU+kG6J1uW9WY83pjtTsvYJ2vtIkp1KKf+c5BtJTqu1/qz32t+lG2bWW5fknaWUHyX5ULqL8sceo90vJ9krG65J+WiS/1FK+cfe699N8nuT31Rr/XG6i/q/n+R76ZaCrXdpumtwvtfr7z7p3g1tvTcl+cITfL0AbCPmTEw80S/YANge9WYjzkry32uta0spL0tyTZJn1Fq36IdDKeW5Sb6Y7o0BnpPk9lrrk1mjMm16dzm7Lckbaq33PNHxAMw8My8As1St9bfprvm4tbeYfVm6tyHe4t9q1Vp/nuSyJCf2p5eNOjndkjTBBaAlzLwAAACtYOYFAABoBeEFAABoBeEFAABoBeEFAABoBeEFAABoBeEFAABohf8PQWBoY2rm3BAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efd1049fb38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.feature_selection import f_regression\n",
    "\n",
    "n_samples = 1000\n",
    "n_features = 50\n",
    "X_reg, y_reg = make_regression(n_samples=n_samples, n_features=n_features,\n",
    "                       n_informative=3, noise=1, random_state=random_state)\n",
    "\n",
    "selector = GenericUnivariateSelect(f_regression, mode='k_best', param=10)\n",
    "selector.fit(X_reg, y_reg)\n",
    "\n",
    "plot_data = pd.DataFrame({\n",
    "    '-log10(p-value)': -np.log10(selector.pvalues_),\n",
    "    'Feature': np.arange(n_features),\n",
    "    'Selected': selector.get_support()\n",
    "})\n",
    "fig, ax = plt.subplots(figsize=(14, 7))\n",
    "sns.barplot(x='-log10(p-value)', y='Feature', hue='Selected', orient='h',\n",
    "            data=plot_data, ax=ax)\n",
    "ax.set_yticks([])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## External validation\n",
    "\n",
    "It is a common mistake to do feature selection on the whole dataset prior to external validation such as\n",
    "cross-validation. It should be realized that many feature selection process already uses information\n",
    "of class labels/target variables and can overfit. Feature selection should be included as part of\n",
    "model training process and only use training data.\n",
    "\n",
    "A typical workflow is:\n",
    "\n",
    "```python\n",
    "scores = [0 for i in range(resample_rounds)]\n",
    "for i in range(resample_rounds):\n",
    "    X_train, y_train, X_test, y_test = resample(X, y)\n",
    "    features = select_features(X_train, y_train)\n",
    "    predictor = Predictor()\n",
    "    predictor.fit(X_train[:, features], y_train)\n",
    "    y_pred = predictor.predict(X_test[:, features])\n",
    "    scores[i] = evaluate(y_test, y_pred)\n",
    "mean_score = mean(scores)\n",
    "```\n",
    "\n",
    "For unsupervised feature selection methods, feature selection can be performed outside the validation loop."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Recursive feature elimination (RFE)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Feature')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efcd51c9c18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.feature_selection import RFECV\n",
    "\n",
    "model = LinearSVC()\n",
    "cv = RFECV(model, cv=3, step=0.1)\n",
    "cv.fit(X, y)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(14, 6))\n",
    "feature_importances = np.zeros(n_features)\n",
    "feature_importances[cv.support_] = np.abs(np.ravel(cv.estimator_.coef_))\n",
    "sns.barplot(x=feature_importances, y=np.arange(n_features), color='gray', orient='h',\n",
    "            ax=ax)\n",
    "ax.set_yticks([])\n",
    "ax.set_xlabel('Feature importance')\n",
    "ax.set_ylabel('Feature')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sequential Forward Selection (SFS)\n",
    "\n",
    "Sequential feature selection (SFS) is a greedy algorithm for best subset feature selection.\n",
    "SFS is wrapper method that ranks features according to a prediction model.\n",
    "SFS starts with an empty feature set. During each step, SFS tries to add a feature from remaining\n",
    "features to the current feature set and train the predictor on the new feature set.\n",
    "A given metric (e.g. accuracy) is used to evaluate the prediction performance on the feature set.\n",
    "Optionally, cross-validation can be used to prevent overfitting.\n",
    "After enumerating all remaining features, SFS keeps a feature with the highest prediction performance\n",
    "and add the feature to the current feature set. The feature stops when a desired number of features\n",
    "are selected.\n",
    "\n",
    "Because SFS retrain the model for every remaining feature and for every step, it demands huge computational\n",
    "resources when the desired number of features is large. For this reason, SFS is recommended only when we\n",
    "want to select a small number of features.\n",
    "\n",
    "Due to the greedy nature of the SFS algorithm, the selected feature subset is not optimal.\n",
    "To overcome local minima, stochastic algorithms such as genetic algorithm (GA) or other types of randomness can\n",
    "be included in the algorithm."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.5, 1)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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o8fntEftdneeALwAyt2dlAXWX96poiSpG373u3I3Wd+XhOqzfIg+nOXLYcEC+Ou/hne8A1atGvm6tOnOP7+EbSif42WXdbeemnh3pzRMHnus/IC56SZ44okNH6/uWrWqtMj85jel9WXpUnjPe+Dss+HHP+52dVqXnXdeu0Vljz3gs58t49N+/3v43ve6U5s23u23l27rVueeO3QYH4829e7O0/HuTulJS5fCf/93/9iY3/wGXvISmNTuFaYRtWZN+WK4//6yPX9++eweeaRsf+lLZZ3WLbboWolah8mT4U//FK6/HlasgAj49a/Ll32f888v45fG25xao01vL3zmM2vf/PHQQ/C1r8GrX92dumqysXd3fgL4GLAYeEOnipJGm8yBg5cfemjgl4bqsmhRf0ADWLly4Oe1ZAl85SsjX5faM2NGCWHHHFPGLX31qwP3L18OX/xid2pT+664on884WD/8z9wzz0jW0+N2g1p+wN7Aw8CjwJ/DGSnipJGm6HGMDmuqV7tfDYXXgi33NL5WvTUfPGLQ9/d+ZOflOEH0mjWbkj7d+AXwJbAV4AlwDc6VdR4tXw5XHllGbh8xx3drkYbIwKmTu3fnjEDdt+9a+VoA3baCbbbrn971aq1Wz57e+GccwzbNXviifUPMndsYd2e8xx41rOG3vfiF8OsWSNbT43aHTHTm5kfjYjtgZuAlwFXd66s8WfNGvjud+Hhh8v2LbfAC17gF/1oseWWcPLJ5XObNAme/nTHo9Xo/vvh5pvLwPMXvADuugsuvbS0ugzVGnPLLSXATZ484qWqsXhxuRlgiy3gmc+EKVP6902eDIceCpdfPvRrjzhiZGrU0Pqut2nTYN99y39b9fTA618Pb3zjwHFp22wDp546srXWqt2vkUeb//4OmJOZv4iI1R2qaVy6777+gNZn4UJD2miy+eZwwAHdrkLrcs895WaBvpaxm28uwXrLLeGii4Z+zUteYkDrpjvugB/8oH/71lvhxBMHHvPqV5cbP1asGPj8c58Lz35252vU0O69t1xvfeHr5pvhpS+FCYP673bfvbSaffvb/c+96lUwffqIlVq1drs7r4yI/wQuAc6MiI8DzkQzjAb/hrGu51S/JUvsIqvRTTcN/FwefrjcQLDzziWMDbb99vCyl41cfVrbDTcM3L7vPnjggYHP7bADnHLKwOemTvXO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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efcd5197e48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from mlxtend.feature_selection import SequentialFeatureSelector\n",
    "\n",
    "model = LogisticRegression()\n",
    "sfs = SequentialFeatureSelector(model, k_features=5,\n",
    "                                forward=True, floating=False, scoring='accuracy', cv=5)\n",
    "sfs.fit(X, y)\n",
    "\n",
    "added_features = []\n",
    "for i in range(1, len(sfs.subsets_) + 1):\n",
    "    if i == 1:\n",
    "        added_features.append(sfs.subsets_[i]['feature_idx'][0])\n",
    "    else:\n",
    "        added_features.append(list(set(sfs.subsets_[i]['feature_idx']) - set(sfs.subsets_[i - 1]['feature_idx']))[0])\n",
    "added_features\n",
    "\n",
    "plot_data = pd.DataFrame(np.column_stack([sfs.subsets_[i]['cv_scores'] for i in sfs.subsets_]))\n",
    "plot_data = pd.melt(plot_data, var_name='n_features', value_name='accuracy')\n",
    "fig, ax = plt.subplots(figsize=(10, 7))\n",
    "sns.stripplot('n_features', 'accuracy', color=(0.6, 0.6, 1.0), data=plot_data, ax=ax)\n",
    "sns.pointplot('n_features', 'accuracy', color=(0.3, 0.3, 1.0), data=plot_data, \n",
    "              join=False, ci=None, ax=ax, markers='d')\n",
    "ax.set_xticklabels(['{} ({})'.format(i + 1, feature) for i, feature in enumerate(added_features)])\n",
    "ax.set_xlabel('n_features (added feature)')\n",
    "ax.set_ylim(0.5, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Embedded feature selection\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### LASSO\n",
    "\n",
    "LASSO is a linear model with L1 regularization on the coefficients.\n",
    "$$ \\text{Loss} = \\sum_{i=1}^N error(\\mathbf{w}^{T} \\mathbf{x}_i + b, y_i) + \\alpha ||\\mathbf{w}||_1 $$\n",
    "where\n",
    "$$ ||\\mathbf{w}||_1 = \\sum_{k=1}^M |w_k| $$\n",
    "\n",
    "The error function depends on the prediction problem. \n",
    "For classification, a Logistic/sigmoid function transforms the linear combination to a class probability\n",
    "between 0 and 1. Then a negative log-likelihood/cross-entropy between predicted probability\n",
    "and true class labels is used as the error function.\n",
    "For regression, squared error is used as the error function.\n",
    "\n",
    "LASSO generate sparse coefficients (with many zero coefficients) through the L1 regularization term.\n",
    "The loss function of LASSO can be rewritten as a constrained optimization problem. Because\n",
    "the feasible region contains many corners anchored at the axes (zero values on some dimensions),\n",
    "there is high probability that the contour of an objective function will hit one of the corners.\n",
    "The regularization strength $\\alpha$ controls the sparseness of the solution.\n",
    "Typically, grid search is used to optimize hyper-parameter $\\alpha$ according to cross-validation scores.\n",
    "$\\alpha$ is commonly choosen on a exponential scale (e.g. from $10^{-6}$ to $10^{6}$)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimized C = 0.1\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Feature')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efcd4fc5048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "model = LogisticRegressionCV(Cs=10**np.arange(-6, 7, dtype='float'),\n",
    "                             penalty='l1', dual=False, solver='liblinear')\n",
    "model.fit(X, y)\n",
    "\n",
    "print('Optimized C = {}'.format(model.C_[0]))\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(14, 6))\n",
    "sns.barplot(x=np.abs(np.ravel(model.coef_)), y=np.arange(n_features), color='gray', orient='h',\n",
    "            ax=ax)\n",
    "ax.set_yticks([])\n",
    "ax.set_xlabel('Feature importance')\n",
    "ax.set_ylabel('Feature')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Elastic net\n",
    "\n",
    "Elastic net is also a linear model, but combines L1 and L2 regularization.\n",
    "L2 regularization penalize more on coefficient values to prevent overfitting and colinearity\n",
    "(linear correlation between features).\n",
    "L1 regularization focus more on sparseness, but is susceptible to colinearity and may also \n",
    "generate large weights.\n",
    "\n",
    "$$ \\text{Loss} = \\sum_{i=1}^N \\text{error}(\\mathbf{w}^{T} \\mathbf{x}_i + b, y_i) \n",
    "+ \\alpha [ \\theta \\cdot ||\\mathbf{w}||_1\n",
    "+ (1 - \\theta) \\cdot ||\\mathbf{w}||_2^2 ] $$\n",
    "where\n",
    "$$ ||\\mathbf{w}||_2^2 = \\sum_{k=1}^M w_k^2 $$\n",
    "\n",
    "Elastic net contains two hyper-paremeters: $\\alpha$ and $\\theta$. The additional parameter $\\theta$\n",
    "controls the ratio between L1 and L2 regularization. When $\\theta = 1$, it becomes LASSO.\n",
    "When $\\theta = 0$, it becomes RIDGE (with only L2 regularization)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Feature')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efcd52dbc88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import ElasticNetCV\n",
    "\n",
    "model = ElasticNetCV(l1_ratio=0.5)\n",
    "model.fit(X, y)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(14, 6))\n",
    "sns.barplot(x=np.abs(np.ravel(model.coef_)), y=np.arange(n_features), color='gray', orient='h',\n",
    "            ax=ax)\n",
    "ax.set_yticks([])\n",
    "ax.set_xlabel('Feature importance')\n",
    "ax.set_ylabel('Feature')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Decision tree\n",
    "\n",
    "Decision tree is a rule-based predictor. Each rule is a criterion on one feature.\n",
    "Each rule/node separate the samples into two subsets with increases homogeneity/purity.\n",
    "Each node grows until all samples are perfectly separated (all leave nodes contains \n",
    "samples from a single class) or a given maximum depth is reached.\n",
    "\n",
    "If a subset of features is sufficient to separate all samples, these features formed the selected feature set.\n",
    "Alternatively, we can select features according to feature importance.\n",
    "After a decision tree has been built, feature importances are calculated as the sum of weighted number of rules\n",
    "used in the tree."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Feature')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efcd51c9e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "\n",
    "model = DecisionTreeClassifier()\n",
    "cv = GridSearchCV(model, param_grid={'max_depth': list(range(1, 10))}, cv=3)\n",
    "cv.fit(X, y)\n",
    "model = cv.best_estimator_\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(14, 6))\n",
    "sns.barplot(x=np.abs(np.ravel(model.feature_importances_)), y=np.arange(n_features), color='gray', orient='h',\n",
    "            ax=ax)\n",
    "ax.set_yticks([])\n",
    "ax.set_xlabel('Feature importance')\n",
    "ax.set_ylabel('Feature')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can use the [sklearn.tree.export_graphviz](http://scikit-learn.org/stable/modules/generated/sklearn.tree.export_graphviz.html)\n",
    "to visualize the rules in the tree."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<wand.image.Image: 9edc6a9 'PDF' (1077x446)>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "from sklearn.tree import export_graphviz\n",
    "from wand.image import Image as WImage\n",
    "\n",
    "graph_data = export_graphviz(model, out_file=None, filled=True, rounded=True) \n",
    "graph = graphviz.Source(graph_data) \n",
    "graph.render('decision_tree')\n",
    "WImage(filename='decision_tree.pdf', resolution=72)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Random forest\n",
    "\n",
    "Random forest is an ensemble algorithm that combines predictions of many decision trees.\n",
    "Randomness is incorporated into each decision tree by bootstraping training samples or tree building process.\n",
    "A single decision tree is easy to overfit because it tries to separate samples perfectly\n",
    "but realistic data usually contains noise features. Due to randomness in training individual decision trees,\n",
    "each tree may give different predictions for a sample. These predictions/votes are combined through \n",
    "majority rule. The fraction of decision trees that contribute to the prediction defines the confidence/probability\n",
    "of the prediction. The ensemble strategy inherits the advantage of decision tree in non-learn modeling of data\n",
    "and is robust against overfitting, which makes random forest an off-the-shelf algorithm\n",
    "for a general machine learning problem.\n",
    "\n",
    "This example uses grid search with cross-validation to optimize two hyper-parameters:\n",
    "max tree depth and number of trees. Finally, it computes feature importances by averageing feature importances\n",
    "of individual trees. The feature importances are not as sparse as decision trees, but a few features\n",
    "stand out among others."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimized hyper-parameters: max_depth = 4, n_estimators = 4\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Feature')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efccce7a240>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "model = RandomForestClassifier()\n",
    "cv = GridSearchCV(model, param_grid={\n",
    "    'max_depth': list(range(1, 5)),\n",
    "    'n_estimators': list(range(10, 60, 10))},\n",
    "    cv=3)\n",
    "cv.fit(X, y)\n",
    "model = cv.best_estimator_\n",
    "print('Optimized hyper-parameters: max_depth = {}, n_estimators = {}'.format(\n",
    "    cv.best_estimator_.max_depth, cv.best_estimator_.max_depth))\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(14, 6))\n",
    "sns.barplot(x=np.abs(np.ravel(model.feature_importances_)), y=np.arange(n_features), color='gray', orient='h',\n",
    "            ax=ax)\n",
    "ax.set_yticks([])\n",
    "ax.set_xlabel('Feature importance')\n",
    "ax.set_ylabel('Feature')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Homework\n",
    "\n",
    "1. Understand and run code in this tutorial on a Jupyter notebook.\n",
    "2. Try univariate feature selection using FDR, FWER, FPR and compare features selected by each method.\n",
    "3. Implement recursive feature elimination (RFE) by yourself. Eliminate 10% features in each round. Plot cross-validation scores (ROAUC) vs number of features.\n",
    "4. Try varying the regularization parameter ($\\alpha$ and $\\theta$) in LASSO and elastic net and see how they affect the selected features and coefficients."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Further reading\n",
    "\n",
    "1. Chandrashekar, G., and Sahin, F. (2014). A survey on feature selection methods. Computers & Electrical Engineering 40, 16–28.\n",
    "2. Guyon, I., and Elisseeff, A. (2003). An Introduction to Variable and Feature Selection. J. Mach. Learn. Res. 3, 1157–1182.\n",
    "3. Saeys, Y., Inza, I., and Larrañaga, P. (2007). A review of feature selection techniques in bioinformatics. Bioinformatics 23, 2507–2517."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
